use strict;
use warnings;
use autodie;
use Encode;
use Encode::CN;
use modle_raw_stock_info_proc;
use modle_basic_k_line_analyse;
use modle_zhouyi_k_line_analyse;
#采用MVC框架的思路对各个模块进行分解
#业务层——统一在文件命名前面加上modle的前缀
#视图层——统一在文件命名前面加上view的前缀
#控制层——统一在文件命名前面加上control的前缀
#这个是控制部分主要是将各个业务模块进行连接
#后期会使用视图层进行展示
#总的控制流程入口
if(@ARGV != 1) {
	print "usage : perl ",__FILE__," <csv data file>\n";
	exit 1;
}
print "=== will begin to analyse data ===\n";
#生成日K线
my @day_k_lines = M_raw_stock_info_proc::day_k_lines_generate($ARGV[0]);
#然后是生成周k线
my @week_k_lines = M_raw_stock_info_proc::week_k_lines_generate($ARGV[0]);
#原始数据基本分析入口
raw_data_analyse_main(@day_k_lines);
raw_data_analyse_main(@week_k_lines);
#时间(格式：yyyy/mm/dd),开盘,最高,最低,收盘,成交量,成交额
#关于时间的格式一般来说原始行情数据就是 日周月年的交易数据
#所以比较死不用纠结不同的格式，由导出数据的部分进行适配处理
sub raw_data_analyse_main
{
	#一个分析模式
	my $date = "";my $start_price = 0.0;my $max_price = 0.0;my $min_price = 0.0;
	my $end_price = 0.0;my $volume = 0;my $desc_str = "";my $up_count = 0;
	my $down_count = 0;my @k_lines = @_;
	M_basic_k_line_analyse::k_line_basic_shape_analyes_init();
	for(@k_lines) {
		if(m/^\d+\/\d+\/\d+/) {
			($date,$start_price,$max_price,$min_price,$end_price,$volume) = split /\,/,$_;
			if($start_price > $end_price) {
				++$up_count;
			} else {
				++$down_count;
			}
			$desc_str = k_line_analyse(($date,$start_price,$max_price,$min_price,$end_price,$volume));
			print "$date,$desc_str\n";
		}
	}

	if($up_count > $down_count) {
		print "涨:$up_count；跌:$down_count\t涨多\n";
	} else {
		print "涨:$up_count；跌:$down_count\t跌多\n";
	}
}

#K线数据分析
sub k_line_analyse
{
	my $k_line_desc = "";
	#对基本形态进行分析，然后返回结果
	$k_line_desc = M_basic_k_line_analyse::k_line_basic_shape_analyes(@_);
	#按照《易经科学新解》对K线进行再次分析
	#$k_line_desc .= ";".M_zhouyi_k_line_analyse::k_line_zhouyi_8guatimewindows_analyse(@_);
	return $k_line_desc;
}
